寫會程式最重要的環節
就是是從亂改參數開始...
--- 筆者幹話集
昨天我們成功讓YOLO v4 在WSL上執行。或許很多讀者也是第一次接觸WSL...
其實,會有這個想法是WSL2 發布的時候,讀者跟同事曾經想在讓WSL直接使用GPU,但是經過多次測試都未果。後來筆者發現,沒有GPU的加持之下,其實YOLO v4也會工作!!!
所以才開始了這一波... 叛逆的操作~
大家都在ubuntu下使用yolo。筆者偏偏要在Windows下執行。而且嘗試用一個比較快的方法實現XD
(謎之音...你明明是借用WSL的能力...)
相信隨著驅動程式的更新,WSL 早晚也會開始支援CUDA的~
如果有讀者測出來還請指導筆者...
今天的內容,我們將嘗試交叉比對一下 YOLO v3, v4 , v3-tiny, v4-tiny。並簡單介紹yolo的重要組成。
簡單的說,今天想討論的是如何"用"
首先,我們先討論一個觀念:YOLOv4真的比YOLOv3好嗎?
筆者的結論是:不見得,必須綜合運用場合來討論。例如YOLOv2所需要的資源就低於YOLOv3。
所以我的建議是:
在Target Device上測試一下數據
綜合各項資源再來討論之~
從YOLOv4的Repo上,幾乎無法找到v3的權重檔下載位置,所以筆者從原始作者的網站中找到下列語法:
wget https://pjreddie.com/media/files/yolov3.weights
同樣從上述網站中也可以找到下列語法:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
請注意執行的結果。相較於v4而言,YOLOv3對於dog的偵測信心居然是1.0(即100%)!!!
當相較之下少了pottedplant(盆栽)的辨識。而執行時間就CPU來說,好像快了不少。
這就是筆者說的,具體要看您的運用場合以及硬體資源。
開啟所辨識的圖檔如下:
就目前而言,筆者整理了一個簡單的概念如下:
如上圖所示,YOLOv3 YOLOv4都是架構在Darknet之上,所以抽換不同的設定檔(cfg)以及權重檔(weights)理論上可以達成各種版本的抽換。這就是在鬼故事那篇提及的v5為何可以快速發表出來的原因,因為只要製作出對應的cfg/weights就可以宣稱有v5 v6 v7 的版本了...
(謎之音:只是做了一個大家都不承認的版本...自己爽而已...)
藉由上面的測試,我們知道修改不同的cfg跟weights可以得到不同的結果。於是筆者就好奇是否還有其他設定檔:
cd cfg
ls
看來有很多的cfg檔在召喚我們... (眼睛發亮模式)
其中,如果您有關注YOLO原作者的網站,不難發現,其實還有一個輕量版本稱為tiny,又稱Lite版。也就是上圖框選出來的檔案。
如同筆者在楔子所提及,身為一名軟體工程師,亂改參數進行測試是最基本的... (壞)習慣 XD
所以難免會開始進行下列的測試:
./darknet detect cfg/yolov3-tiny.cfg yolov3.weights data/dog.jpg
居然!甚麼都沒有!!可見不可以亂配...
圖片來源 「反正我很閒」
筆者覺得自己就像上圖一樣,不測試各種惡搞的組合,誓不罷休... (壞習慣又來了...)
於是有了下面的測試集合:
./darknet detect cfg/yolov4-tiny.cfg yolov3.weights data/dog.jpg
./darknet detect cfg/yolov3-tiny.cfg yolov4.weights data/dog.jpg
./darknet detect cfg/yolov4-tiny.cfg yolov4.weights data/dog.jpg
恭喜我! 得到全部都失敗的結果!!!!
是否有很多次... 你都跟筆者一樣....
不愛看說明書...
根據上面的錯誤實驗,筆者還是去原作者官方網站找到下列命令
wget https://pjreddie.com/media/files/yolov3-tiny.weights
嘗試執行
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
圖片結果:
可以看到執行速度非常快!而辨識結果的信心值卻掉下來了。
從 GitHub中可以找到yolov4-tiny的權重檔案。下載如下:
wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights
執行結果測試看看吧~
./darknet detect cfg/yolov4-tiny.cfg yolov4-tiny.weights data/dog.jpg
相對應的圖檔如下:
注意上圖中的辨識速度,注意,這是CPU模式!!
至今為止,我們嘗試了v3 v4 v3-tiny v4-tiny的辨識方式。
通過實驗,我們再次證明了,只有最適用的AI模型,沒有最好的AI模型。
雖然YOLOv4有較準確的結果,但YOLOv4-tiny辨識速度非常快速。
至於要準度,還是速度,就是實際運用場域的問題了。
另外,我們通過多次的測試(含失敗)可以得到一個結論cfg跟weight是配套的。不可以亂設定.
未來的日子裡,我們將慢慢對cfg 跟weight 抽絲剝繭 來進行討論。
早知道不要寫甚麼鬼故事...結果自己就遇到鬼故事...
所以筆者學乖一點還是使用HackMD來編輯好了,日後的文章就同步發表到HackMD了
本文同步發布於 HackMD